package br.com.rcbsystens.promotora.model.propostaweb;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.rcbsystens.promotora.model.dao.CepDao;
import br.com.rcbsystens.promotora.model.email.Email;
import br.com.rcbsystens.promotora.model.entidades.Enderecos;
import br.com.rcbsystens.promotora.model.entidades.NumeroFormatado;
import br.com.rcbsystens.promotora.model.entidades.tabelas.Tabelas;
import br.com.rcbsystens.promotora.model.entidades.tabelas.TabelasDao;
import br.com.rcbsystens.promotora.model.imutaveis.ClassificacaoLocalTrabalho;
import br.com.rcbsystens.promotora.model.imutaveis.Escolaridade;
import br.com.rcbsystens.promotora.model.imutaveis.EstadoCivil;
import br.com.rcbsystens.promotora.model.imutaveis.Estados;
import br.com.rcbsystens.promotora.model.imutaveis.Nacionalidade;
import br.com.rcbsystens.promotora.model.imutaveis.RelacaoBancos;
import br.com.rcbsystens.promotora.model.imutaveis.Retorno;
import br.com.rcbsystens.promotora.model.imutaveis.Sexo;
import br.com.rcbsystens.promotora.model.imutaveis.TipoResidencia;
import br.com.rcbsystens.promotora.model.imutaveis.TipoVeiculo;
import br.com.rcbsystens.promotora.model.pdf.PropostaWebEmPdf;

@ManagedBean
@SessionScoped
public class PropostaBean {

	private PropostaWeb proposta = new PropostaWeb();
	private Enderecos endereco;
	private CepDao consultaCep = new CepDao();
	public DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
	public DateFormat dfSemHora = new SimpleDateFormat("dd/MM/yyyy");
	public NumeroFormatado numeroFormatado = new NumeroFormatado();
	public TabelasDao buscaTabela = new TabelasDao();
	public List<String> parcelas = new ArrayList<String>();
	public String processando = new String();

	// public NumberFormat numeroFormatado = NumberFormat.getInstance( new
	// Locale( "pt_br" ) );
	private StringBuffer simulacao = new StringBuffer();

	public PropostaWeb getProposta() {
		return proposta;
	}

	public void setProposta(PropostaWeb proposta) {
		this.proposta = proposta;
	}

	public String getProcessando() {
		return processando;
	}

	public void setProcessando(String processando) {
		this.processando = processando;
	}

	public List<String> getParcelas() {
		return parcelas;
	}

	public void setParcelas(List<String> parcelas) {
		this.parcelas = parcelas;
	}

	public StringBuffer getSimulacao() {
		return simulacao;
	}

	public void setSimulacao(StringBuffer simulacao) {
		this.simulacao = simulacao;
	}

	public TipoVeiculo[] getTipoVeiculos() {
		return TipoVeiculo.values();
	}

	public Retorno[] getRetornos() {
		return Retorno.values();
	}

	public Estados[] getEstados() {
		return Estados.values();
	}

	public Nacionalidade[] getNacionalidades() {
		return Nacionalidade.values();
	}

	public Sexo[] getSexos() {
		return Sexo.values();
	}

	public EstadoCivil[] getEstadoCivils() {
		return EstadoCivil.values();
	}

	public Escolaridade[] getEscolariadades() {
		return Escolaridade.values();
	}

	public TipoResidencia[] getTipoResidencias() {
		return TipoResidencia.values();
	}

	public ClassificacaoLocalTrabalho[] getClassificacaoLocalTrabalhos() {
		return ClassificacaoLocalTrabalho.values();
	}

	public RelacaoBancos[] getRelacaoBancos() {
		return RelacaoBancos.values();
	}

	public void chamaProposta() {
		System.out.println(proposta.getTipoVeiculo());
	}

	public void buscaCep() {
		String cep = proposta.getResCep();
		endereco = consultaCep.Consulta(cep);
		if (endereco.getLogradouro() != null) {
			proposta.setResLogradouro(endereco.getLogradouro());
			proposta.setResBairro(endereco.getBairro());
			proposta.setResCidade(endereco.getCidade());
			proposta.setResUf(endereco.getEstado());
		}

	}

	public void informacaoEstadoCivil() {
		if (proposta.getEstadoCivilCliente().toString().equals("Casado")
				|| proposta.getEstadoCivilCliente().toString()
						.equals("União Estavel")) {
			FacesContext context1 = FacesContext.getCurrentInstance();
			context1.addMessage(
					null,
					new FacesMessage(
							FacesMessage.SEVERITY_WARN,
							"Estado Civil selecionado: "
									+ proposta.getEstadoCivilCliente()
											.toString(),
							"Esta opção de estado civil selecionado, clik na aba conjuge e preencha os dados de seu companheiro!!!"));
		}
	}

	public void buscaCepComercial() {
		String cep2 = proposta.getComCep();
		Enderecos enderecoComercial = new Enderecos();
		enderecoComercial = consultaCep.Consulta(cep2);
		if (enderecoComercial.getLogradouro() != null) {
			proposta.setComLogradouro(enderecoComercial.getLogradouro());
			proposta.setComBairro(enderecoComercial.getBairro());
			proposta.setComCidade(enderecoComercial.getCidade());
			proposta.setComUf(enderecoComercial.getEstado());
		}
	}

	public void buscaCepComercialConjugue() {
		String cep3 = proposta.getComCep();
		Enderecos enderecoComercialConjugue = new Enderecos();
		enderecoComercialConjugue = consultaCep.Consulta(cep3);
		if (enderecoComercialConjugue.getLogradouro() != null) {
			proposta.setComLogradouro(enderecoComercialConjugue.getLogradouro());
			proposta.setComBairro(enderecoComercialConjugue.getBairro());
			proposta.setComCidade(enderecoComercialConjugue.getCidade());
			proposta.setComUf(enderecoComercialConjugue.getEstado());
		}
	}

	public void calculaValorFinanciado() {
		BigDecimal valorFinanciadoComEncargos;
		System.out.println(System.getProperty("user.name") + ": "
				+ System.getProperty("user.home"));
		parcelas = new ArrayList<String>();
		BigDecimal tarifasBanco = new BigDecimal("1640.00");
		if (proposta.getTipoVeiculo()==null){
			proposta.setTipoVeiculo(TipoVeiculo.USADO);
		}
		if (proposta.getValorCompra() != null
				&& proposta.getValorEntrada() != null) {

			BigDecimal valor1 = new BigDecimal(proposta.getValorCompra()
					.toString());
			BigDecimal valor2 = new BigDecimal(proposta.getValorEntrada()
					.toString());
			proposta.setValorFinanciado(valor1.subtract(valor2));

			if (proposta.getValorFinanciado().doubleValue() < 3000) {
				FacesContext context = FacesContext.getCurrentInstance();
				context.addMessage(
						null,
						new FacesMessage(
								FacesMessage.SEVERITY_ERROR,
								"Valor financiado inferior ao mínimo de R$3.000,00.",
								"Infelizmente não financiamos valores inferiores a R$3.000,00!"));
			} else if (proposta.getValorFinanciado().doubleValue() <= 0) {
				FacesContext context = FacesContext.getCurrentInstance();
				context.addMessage(null, new FacesMessage(
						FacesMessage.SEVERITY_ERROR, "Verifique seus dados!",
						"Valor da entrada, maior ou igual a valor da compra!"));
			}

			valorFinanciadoComEncargos = new BigDecimal(proposta
					.getValorFinanciado().toString());
			valorFinanciadoComEncargos = valorFinanciadoComEncargos
					.add(new BigDecimal(tarifasBanco.toString()));
			int ano = Integer.parseInt(proposta.getModelo());
			List<Tabelas> tab = new ArrayList<Tabelas>();

			boolean zero = false;
			System.out.println(proposta.getTipoVeiculo());
			System.out.println(proposta.getRetorno());

			if (proposta.getTipoVeiculo().toString().equals("Novo")) {
				valorFinanciadoComEncargos = valorFinanciadoComEncargos
						.subtract(new BigDecimal("350"));
				zero = true;
			} else if (proposta.getTipoVeiculo().toString().equals("Usado")) {
				zero = false;
			}

			if (proposta.getRetorno() == null) {
				proposta.setRetorno(Retorno.RDOIS);
			}
			
			if (buscaTabela.consultaTabelaPorAnoRetorno(ano) != null) {
				tab = buscaTabela.consultaTabelaPorAnoRetorno(ano);
				for (int t = 0; t < tab.size(); t++) {
					System.out.println(" ");
					System.out.println("Codigo: " + tab.get(t).getCodigo()
							+ " Prazos: " + tab.get(t).getPrazos().size()
							+ " De: " + tab.get(t).getModeloInicial() + " a "
							+ tab.get(t).getModeloFinal());

					for (int i = 0; i < tab.get(t).getPrazos().size(); i++) {
						System.out.println("Prazo "
								+ tab.get(t).getPrazos().get(i).getPrazo()
										.toString()
								+ " Entrada: "
								+ tab.get(t).getPrazos().get(i)
										.getPercentualEntrada()
										.multiply(new BigDecimal("100")));

						for (int j = 0; j < tab.get(t).getPrazos().get(i)
								.getPlanos().size(); j++) {
							if (tab.get(t).getPrazos().get(i).getPlanos()
									.get(j).getRetorno().toString()
									.equals(proposta.getRetorno().toString())
									&& tab.get(t).getZeroKm().equals(zero)
									&& proposta
											.getRetorno()
											.toString()
											.equals(tab.get(t).getPrazos()
													.get(i).getPlanos().get(j)
													.getRetorno().toString())) {
								StringBuffer coeficientes = new StringBuffer();
								coeficientes.append(tab.get(t).getPrazos()
										.get(i).getPrazo().toString());
								coeficientes.append(" X R$ ");
								BigDecimal parcela = new BigDecimal("0");
								parcela = tab.get(t).getPrazos().get(i)
										.getPlanos().get(j).getCoeficiente()
										.multiply(valorFinanciadoComEncargos);
								coeficientes.append(numeroFormatado
										.comDuasCasasDecimais(parcela)
										.toString());
								coeficientes
										.append(" Parcela exclusiva pela Sul Financeira!");
								System.out.println(coeficientes);
								parcelas.add(coeficientes.toString());
							}
						}

					}

				}
			}

		}

	}

	public void enviar() {
		PropostaWebEmPdf propostaEmPdf = new PropostaWebEmPdf();
		Email email = new Email();
		Date dataHora = new Date();
		String nomeDoArquivo = new String();
		PropostaWebDao propostaDao = new PropostaWebDao();
		propostaDao.salvar(proposta);
		nomeDoArquivo = (proposta.getNomeCliente() + df.format(dataHora));
		nomeDoArquivo = nomeDoArquivo.replaceAll(":", "");
		nomeDoArquivo = nomeDoArquivo.replaceAll(" ", "");
		nomeDoArquivo = nomeDoArquivo.replaceAll("/", "");
		System.out.println(nomeDoArquivo);
		propostaEmPdf.preencher(nomeDoArquivo, proposta);

		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(
				null,
				new FacesMessage("Successo", "Proposta de: "
						+ proposta.getNomeCliente() + " enviada em: "
						+ df.format(dataHora) + "."));

		String menssagem = new String();
		menssagem = proposta.getInformacoes();

		String destinatario = new String("real.df@bbpromotora.com.br,propostas@rcbsystems.com.br,ligia@bbpromotora.com.br");
		String tilulo = new String("Proposta de: " + proposta.getNomeCliente() 	+ " CPF: " + proposta.getCpfCliente() + " enviada em: "	+ df.format(dataHora));
		email.enviarEmailComArquivo(destinatario, tilulo, menssagem, System.getProperty("user.home") + "/promotora-tv1/" + nomeDoArquivo + ".pdf");
		System.out.println("Proposta enviada em: " + df.format(dataHora));
		System.out.println("Nome: " + proposta.getNomeCliente());
		proposta = new PropostaWeb();
	}
}

/**
 * aproveitar este codigo caso precise imprimir as propostas
 * 
 * StringBuffer textoMenssagem = new StringBuffer();
 * textoMenssagem.append("Proposta enviada em: " + df.format(dataHora));
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Fabricante: " + proposta.getFabricante());
 * textoMenssagem.append(" "); textoMenssagem.append("Modelo: " +
 * proposta.getModeloVeiculo()); textoMenssagem.append(" ");
 * textoMenssagem.append("Ano: " + proposta.getAno());
 * textoMenssagem.append(" "); textoMenssagem.append("Modelo: " +
 * proposta.getModelo()); textoMenssagem.append(" ");
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("V.Compra: " + proposta.getValorCompra());
 * textoMenssagem.append(" "); textoMenssagem.append("V.entrada: " +
 * proposta.getValorEntrada()); textoMenssagem.append(" ");
 * textoMenssagem.append("V.financiado: " + proposta.getValorFinanciado());
 * textoMenssagem.append(" "); textoMenssagem.append("Prazo da proposta: ");
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Nome: " + proposta.getNomeCliente());
 * textoMenssagem.append(" CPF: " + proposta.getCpfCliente());
 * textoMenssagem.append(" D.Nasc.: " +
 * dfSemHora.format(proposta.getDataNascimentoCliente()));
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("RG: " + proposta.getRegistroGeralCliente());
 * textoMenssagem.append(" O.emissor: " + proposta.getOrgaoEmissorCliente());
 * textoMenssagem.append(" " + proposta.getUfOrgaoEmissorCliente());
 * textoMenssagem.append(" D.emissão: " +
 * dfSemHora.format(proposta.getDataEmissaoCliente()));
 * textoMenssagem.append(" Nac.: " + proposta.getNacionalidadaCliente());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Naturalidade: " + proposta.getNaturalidadeCliente());
 * textoMenssagem.append(" UF: " + proposta.getUfNaturalidadeCliente());
 * textoMenssagem.append(" Sexo: " + proposta.getSexoCliente());
 * textoMenssagem.append(" E. civil: " + proposta.getEstadoCivilCliente());
 * textoMenssagem.append(" Esc.: " + proposta.getEscolaridadeCliente());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Pai: " + proposta.getPaiCliente());
 * textoMenssagem.append(" Mae: " + proposta.getMaeCliente());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("F.Res.: " + proposta.getFoneResidencial());
 * textoMenssagem.append(" Celular: " + proposta.getCelularCliente());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Email: " + proposta.getEmail());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append(" T.Res.: " + proposta.getTipoResidencia());
 * textoMenssagem.append(" V.Aluguel: " + proposta.getValorAluguel());
 * textoMenssagem.append(" T. Res.: " +
 * dfSemHora.format(proposta.getTempoResidencia()));
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("CEP: " + proposta.getResCep());
 * textoMenssagem.append(" Log.: " + proposta.getResLogradouro());
 * textoMenssagem.append(", " + proposta.getResNumero());
 * textoMenssagem.append(" Comp.: " + proposta.getResComplemento());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Bairro: " + proposta.getResBairro());
 * textoMenssagem.append(" Cidade: " + proposta.getResCidade());
 * textoMenssagem.append(" UF: " + proposta.getResUf());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Tipo de LT: " +
 * proposta.getClassificacaoLocalTrabalho()); textoMenssagem.append("\n");
 * textoMenssagem.append("\n"); textoMenssagem.append("Empresa: " +
 * proposta.getEmpresa()); textoMenssagem.append(" Data Admissão: " +
 * dfSemHora.format(proposta.getDataAdmissao())); textoMenssagem.append("\n");
 * textoMenssagem.append("\n"); textoMenssagem.append("CNPJ: " +
 * proposta.getCnpj()); textoMenssagem.append(" Cargo: " + proposta.getCargo());
 * textoMenssagem.append(" Salário: " + proposta.getSalario());
 * textoMenssagem.append(" Fone LT: " + proposta.getFoneLocalTrabalho());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("CEP: " + proposta.getComCep());
 * textoMenssagem.append(" Log.: " + proposta.getComLogradouro());
 * textoMenssagem.append(", " + proposta.getComNumero());
 * textoMenssagem.append(" Comp.: " + proposta.getComComplemento());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Bairro: " + proposta.getComBairro());
 * textoMenssagem.append(" Cidade: " + proposta.getComCidade());
 * textoMenssagem.append(" UF: " + proposta.getComUf());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Renda adcional: " + proposta.getProvenienteRenda2());
 * textoMenssagem.append(" Valor: " + proposta.getRenda2());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("Ref.: " + proposta.getReferencia1());
 * textoMenssagem.append(" Tel.: " + proposta.getFoneRefencia1());
 * textoMenssagem.append(" Ref.: " + proposta.getReferencia2());
 * textoMenssagem.append("Tel.: " + proposta.getFoneReferencia2());
 * textoMenssagem.append("\n"); textoMenssagem.append("\n");
 * textoMenssagem.append("B.: " + proposta.getBanco());
 * textoMenssagem.append(" Ag.: " + proposta.getAgencia());
 * textoMenssagem.append(" C/C: " + proposta.getConta());
 * textoMenssagem.append("Desde: " + dfSemHora.format(proposta.getAbertura()));
 * if (proposta.getNomeConjugue().length() > 3) { textoMenssagem.append("\n");
 * textoMenssagem.append("\n");
 * textoMenssagem.append("******** Dados do Conjugue ********");
 * textoMenssagem.append("Conjugue: ****" + proposta.getNomeConjugue() +
 * "****"); }
 **/
